Шаг 12. Добавляем выборочно изменения в индекс

Порой нужно добавить в индекс только часть изменений из файла. Например, вы выполняли в одном файле несколько задач, но ни одна не была закоммиченна. В итоге вам нужно сначала выбрать изменения, которые относятся к одной задаче и закоммитить их, а потом повторить всё то же самое для другой задачи. В этом вам поможет команда git add с опцией -p (развёрнуто --patch).

Для начала внесём изменения в index.html:

  • изменим язык с en на ru;
  • кодировку UTF-8 напишем строчными буквами utf-8;
  • изменим заголовок документа <title>;
  • добавим заголовок <h1> с текстом «Главная страница».

Страница index.html с внесёнными изменениями
Страница index.html с внесёнными изменениями

Теперь посмотрим, какой статус имеет файл index.html. Проверяем с помощью команды git status.

Введена команда git status
Введена команда git status

Сейчас у файла модифицированный статус, так как он уже начал отслеживаться Git. Все новые внесённые изменения будут помечаться таким статусом.

Введём в Git Bash команду git add -p и нажмём Enter.

Введена команда git add -p
Введена команда git add -p

После ввода команды мы увидим наши изменения, а также буквы, которые мы можем использовать для работы с данным режимом.

Что делает каждая буква:

  • y — добавляет одну часть изменений в индекс.
  • n — не добавляет одну часть изменений в индекс.
  • q — выходит из этого режима и не добавляет никаких изменений в индекс.
  • a — добавляет все части изменений в индекс.
  • d — не добавляет все части изменений в индекс.
  • s — разбивает текущий фрагмент кода на более мелкие куски (то, что нам нужно).
  • e — позволяет вручную отредактировать часть кода (открывает дополнительное окно редактора), а затем добавляет изменения в индекс.
  • ? — выводит справку по каждой букве (на латинице).

Нам понадобится буква s — она разобьёт фрагмент кода на более мелкие куски. Введём её и нажмём Enter.

Введена буква s в режиме добавления частей кода
Введена буква s в режиме добавления частей кода

Изменения разбились на четыре мелкие части. Также у нас появились дополнительные буквы, которые тоже сейчас разберём.

  • j — откладывает часть изменений (на случай, если вы не знаете, что пока с ней делать) и переходит к следующей такой же отложенной части. Если отложенной части нет, то просто переходит к следующей части.
  • J — откладывает часть изменений и переходит к следующей части. Тут важно понимать разницу: при вводе этой буквы перебрасывает к следующей части, а при вводе маленькой j перебрасывает к следующей отложенной части, если такая есть.
  • g — позволяет перейти к определённой части (нужно будет ввести номер).
  • / — поиск части по заданному регулярному выражению.

Выберем первую часть изменений — вводим y и далее нажимаем Enter, для всех последующих частей проставьте n.

Если мы сейчас введём команду git status, то увидим, что файл находится сразу в двух состояниях.

Введена команда git status
Введена команда git status

Это нормально. Часть изменений добавлена в индекс, а оставшиеся три части всё ещё находятся в статусе «Модифицированные» и ждут, когда их тоже добавят в индекс или просто отменят.

Далее нам нужно закоммитить изменения, добавленные в индекс, с помощью команды git commit -m "текст коммита". Текст можно написать, используя соглашения о коммитах. Например, feat: the page language has been changed — в переводе означает «Язык страницы был изменён».

Введена команда git commit -m
Введена команда git commit -m

Последнее, что сделаем — отправим коммит в удалённый репозиторий с помощью команды git push.

Введена команда git push
Введена команда git push

Перейдём в репозиторий и убедимся, что коммит действительно отправлен.

Страница удалённого репозитория
Страница удалённого репозитория

Задание: оставшиеся три изменения сделайте сами. Действуйте точно так же — через команду git add -p. Сделайте три коммита и отправьте на удалённый репозиторий.